package com.vehiclemanagement.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vehiclemanagement.entity.VehicleUseRecord;

import java.time.LocalDateTime;

/**
 * 车辆出车记录服务接口
 */
public interface VehicleUseRecordService extends IService<VehicleUseRecord> {
    
    /**
     * 分页查询出车记录
     * 
     * @param current 当前页
     * @param size 每页记录数
     * @param searchTerm 搜索关键词
     * @param vehicleId 车辆ID（可选）
     * @param driverId 驾驶员ID（可选）
     * @param status 状态（可选）
     * @param startDate 开始日期（可选）
     * @param endDate 结束日期（可选）
     * @return 分页结果
     */
    IPage<VehicleUseRecord> pageRecords(Integer current, Integer size, String searchTerm, 
                                      Long vehicleId, Long driverId, Integer status, 
                                      LocalDateTime startDate, LocalDateTime endDate);
    
    /**
     * 根据ID获取出车记录
     * 
     * @param id 出车记录ID
     * @return 出车记录
     */
    VehicleUseRecord getRecordById(Long id);
    
    /**
     * 添加出车记录
     * 
     * @param record 出车记录
     * @return 是否成功
     */
    boolean addRecord(VehicleUseRecord record);
    
    /**
     * 更新出车记录
     * 
     * @param record 出车记录
     * @return 是否成功
     */
    boolean updateRecord(VehicleUseRecord record);
    
    /**
     * 删除出车记录
     * 
     * @param id 出车记录ID
     * @return 是否成功
     */
    boolean deleteRecord(Long id);
    
    /**
     * 审批出车申请
     * 
     * @param id 出车记录ID
     * @param approver 审批人
     * @param approved 是否通过
     * @param remark 备注
     * @return 是否成功
     */
    boolean approveRecord(Long id, String approver, boolean approved, String remark);
    
    /**
     * 确认出车
     * 
     * @param id 出车记录ID
     * @param startMileage 出车里程数
     * @return 是否成功
     */
    boolean startUse(Long id, Double startMileage);
    
    /**
     * 确认归还
     * 
     * @param id 出车记录ID
     * @param endMileage 归还里程数
     * @return 是否成功
     */
    boolean returnVehicle(Long id, Double endMileage);
    
    /**
     * 检查车辆是否有未归还的出车记录
     * 
     * @param vehicleId 车辆ID
     * @return 是否有未归还记录
     */
    boolean hasActiveUseByVehicleId(Long vehicleId);
    
    /**
     * 检查驾驶员是否有未归还的出车记录
     * 
     * @param driverId 驾驶员ID
     * @return 是否有未归还记录
     */
    boolean hasActiveUseByDriverId(Long driverId);
} 